package com.inspinia.upms.dao;

import com.inspinia.base.dao.BaseDao;
import com.inspinia.upms.common.model.dept.UpmsDept;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * 部门管理 数据层
 * 
 * @author ruoyi
 */
public interface UpmsDeptDao extends BaseDao<UpmsDept> {
    /**
     * 批量删除部门
     *
     * @param ids 部门id数组
     */
    int batchDelete(@Param("ids") Long[] ids);

    /**
     * 根据组织机构id找到部门id集合
     *
     * @param orgIds 组织机构id
     * @return
     */
    List<Long> findDeptIdsByOrgIds(@Param("orgIds") Collection<Long> orgIds);

    /**
     * 查找所有的部门
     *
     * @return
     */
    List<UpmsDept> findAll();

    /**
     * 查找用户所有部门的id
     *
     * @param userId 用户id
     * @return
     */
    List<Long> findDeptIdsByUserId(@Param("userId") Long userId);

    /**
     * 根据id查找部门的名称
     *
     * @param deptIds 部门id集合
     * @return
     */
    List<String> findNamesByIds(@Param("deptIds") List<Long> deptIds);

    /**
     * 统计同组织下已存在的同名部门
     *
     * @param name  不猛名
     * @param orgId 机构id
     * @param id    部门id
     * @return
     */
    int countExistedByName(@Param("name") String name, @Param("orgId") Long orgId, @Param("id") Long id);

    /**
     * 根据部门id获取机构id
     *
     * @param deptId 部门id
     * @return
     */
    Long getOrgIdByDeptId(Long deptId);

    /**
     * 根据id获取部门的名称
     *
     * @param deptId 部门id
     * @return
     */
    String getNameById(Long deptId);

    /**
     * 将人员分配到部门
     *
     * @param leaderId 领导id
     * @param id       部门id
     * @return
     */
    int saveUser2Dept(@Param("leaderId") Long leaderId, @Param("id") Long id);

    /**
     * 根据id集合查找部门
     *
     * @param ids 部门id集合
     * @return 部门集合
     */
    List<UpmsDept> findByIds(@Param("ids") List<Long> ids);

    /**
     * 根据部门id删除部门和用户的中间表数据
     *
     * @param ids 部门id
     * @return
     */
    int deleteUserByDept(@Param("ids") Long[] ids);

    /**
     * 查找部门的组织机构id
     *
     * @param deptIds 部门id集合
     * @return 部门所在的机构id
     */
    List<Long> findOrgIds(@Param("deptIds") List<Long> deptIds);

    /**
     * 查找某城市下某部门的id
     *
     * @param cityId   城市id
     * @param deptName 部门名称
     * @return
     */
    List<Long> findDeptIds(@Param("cityId") Long cityId, @Param("deptName") String deptName);

    /**
     * 根据用户id获取部门
     * @param userId
     * @return
     */
    List<UpmsDept> findDeptByUserOrg(@Param("userId") Long userId);

    List<Long> findUserIdsByDeptId(@Param("deptIds") List<Long> deptIds);

    /**
     * 根据部门id获取公章
     * @param deptId
     * @return
     */
    String getOfficialSealUrlByDeptId(Long deptId);

    /**
     * 根据机构id查询部门信息
     * @param orgId
     * @return
     */
    List<UpmsDept> findByOrgId(@Param("orgId") Long orgId);

    /**
     * 查找用户所在机构的所有部门 (不包含自己的部门)
     *
     * @param userId 用户id
     * @return
     */
    List<UpmsDept> findDeptByUserOrgExcludeOneSelf(Long userId);

    /**
     * 查找用户所在机构的所有部门 (不包含自己的部门和发起中心)
     * @param userId
     * @param noOneSelf
     * @param createDeptId
     * @return
     */
    List<UpmsDept> findDeptByUserOrgExcludeOneSelfAndDept(@Param("userId") Long userId, @Param("noOneSelf") Boolean noOneSelf, @Param("createDeptId") Long createDeptId);

    /**
     * 查找指挥中心的名称
     * @param orgId
     * @return
     */
    UpmsDept findCommandCenterNameByOrgId(@Param("orgId") Long orgId);

    List<Long> findDeptIdsInOrg(@Param("orgId") Long orgId, @Param("deptName") String deptName);
}
